/**
 * 提示与加载工具类
 */
export default class Tips {
  constructor() {
    this.isLoading = false
  }

  /**
   * 弹出确认窗口
   */
  static confirm(text, showCancel, payload = {}, title = '提示') {
    return new Promise((resolve, reject) => {
      uni.showModal({
        title: title,
        content: text,
        showCancel: showCancel,
        success: (res) => {
          if (res.confirm) {
            resolve(payload)
          } else if (res.cancel) {
            reject(payload)
          }
        },
        fail: (res) => {
          reject(payload)
        },
      })
    })
  }

  /**
   * 弹出提示框
   */
  static toast(options, onHide) {
    uni.showToast({
      title: '默认提示',
      icon: 'none',
      mask: true,
      duration: 1000,
      ...options,
    })
    return new Promise((resolve) => {
      setTimeout(() => {
        onHide()
        resolve()
      }, (options.duration | 1000) + 500)
    })
  }

  /**
   * 成功框
   */
  static success(title, onHide) {
    return Tips.toast({
      title,
      duration: 1500,
      icon: 'success',
    }, onHide)
  }

  /**
   * 警告框
   */
  static alert(title, onHide) {
    return Tips.toast({
      title,
      image: '../../static/alert.png',
      duration: 1500,
    }, onHide)
  }

  /**
   * 错误框
   */
  static error(title, onHide) {
    return Tips.toast({
      title,
      image: '../../static/error.png',
      duration: 1500,
    }, onHide)
  }

  /**
   * 弹出加载提示
   */
  static loading(title = '加载中') {
    if (Tips.isLoading) {
      return
    }
    Tips.isLoading = true
    uni.showLoading({
      title: title,
      mask: true,
    })
  }

  /**
   * 加载完毕
   */
  static loaded() {
    if (Tips.isLoading) {
      Tips.isLoading = false
      uni.hideLoading()
    }
  }
}

/**
 * 静态变量，是否加载中
 */
Tips.isLoading = false
